ARD2  1.00 for Rev B. Hardware
Airbag Reference Demonstrator using MPC5604P
CRC.h
Go to the documentation of this file.
00001 
00017 #ifndef CRC_H_
00018 #define CRC_H_
00019 
00020 /*
00021  **************************************************************
00022  * Defines, Macros and Typedefs 
00023  **************************************************************/
00024 /*** Constant Macros ***/
00025 /* Default Yes and No defines */
00026 #ifndef TRUE
00027  #define TRUE (1u)
00028 #endif
00029 #ifndef CLEAR
00030  #define CLEAR (0u)
00031 #endif
00032 #ifndef BITS_IN_NIBBLE
00033  #define BITS_IN_NIBBLE (4u)
00034 #endif
00035 #ifndef BITS_IN_BYTE
00036  #define BITS_IN_BYTE (8u)
00037 #endif
00038 #ifndef BYTES_IN_16
00039  #define BYTES_IN_16  (2u)
00040 #endif
00041 #ifndef BYTES_IN_32
00042  #define BYTES_IN_32  (4u)
00043 #endif
00044 
00045 #ifndef BIT_DEFINITION
00046  #define BIT_DEFINITION
00047  #define BIT0  (1u << 0u)
00048  #define BIT1  (1u << 1u)
00049  #define BIT2  (1u << 2u)
00050  #define BIT3  (1u << 3u)
00051  #define BIT4  (1u << 4u)
00052  #define BIT5  (1u << 5u)
00053  #define BIT6  (1u << 6u)
00054  #define BIT7  (1u << 7u)
00055  #define BIT8  (1u << 8u)
00056  #define BIT9  (1u << 9u)
00057  #define BIT10 (1u << 10)
00058  #define BIT11 (1u << 11)
00059  #define BIT12 (1u << 12)
00060  #define BIT13 (1u << 13)
00061  #define BIT14 (1u << 14)
00062  #define BIT15 (1u << 15)
00063  #define BIT16 (1u << 16)
00064  #define BIT17 (1u << 17)
00065  #define BIT18 (1u << 18)
00066  #define BIT19 (1u << 19)
00067  #define BIT20 (1u << 20)
00068  #define BIT21 (1u << 21)
00069  #define BIT22 (1u << 22)
00070  #define BIT23 (1u << 23)
00071  #define BIT24 (1u << 24)
00072  #define BIT25 (1u << 25)
00073  #define BIT26 (1u << 26)
00074  #define BIT27 (1u << 27)
00075  #define BIT28 (1u << 28)
00076  #define BIT29 (1u << 29)
00077  #define BIT30 (1u << 30)
00078  #define BIT31 (1u << 31)
00079 #endif
00080 
00081 /* Instance list */
00082 #define CRC_INSTANCE_0   0x00u
00083 #define CRC_INSTANCE_1   0x01u
00084 
00085 /* Masks for CRCConfig_t */
00086 #define CRC_INSTANCE_0_MASK    0x00u
00087 #define CRC_INSTANCE_1_MASK    0x10u
00088 #define CRC_CCITT              0x00u
00089 #define CRC_32                 0x04u
00090 #define CRC_NO_MSB_SWAP        0x00u
00091 #define CRC_MSB_SWAP           0x02u
00092 #define CRC_NO_RESULT_INV      0x00u
00093 #define CRC_RESULT_INV         0x01u
00094 
00095 /* DMA Channels occupied by this fn. */
00097 #define CRC_DMA_CH_0        (10u)
00098 
00099 #define CRC_DMA_CH_1        (11u)
00100 
00101 /*** Function Macros ***/
00102 #ifndef N_ELEMENTS
00103  #define N_ELEMENTS(X)           (sizeof(X)/sizeof(*(X)))
00104 #endif
00105 
00106 /* Where XX = pu32StartAddress, YY = u32NoOfWords, ZZ = pu32Result */
00107 #define CRC32_0(XX, YY, ZZ) u8fnCRC(XX, YY, ZZ, 0xFFFFFFFFu, \
00108                                     CRC_DMA_CH_0, CRC_0_32)
00109 #define CRC32_1(XX, YY, ZZ) u8fnCRC(XX, YY, ZZ, 0xFFFFFFFFu, \
00110                                     CRC_DMA_CH_1, CRC_1_32)
00111 #define CCITT_0(XX, YY, ZZ) u8fnCRC(XX, YY, ZZ, CLEAR, CRC_DMA_CH_0, \
00112                                     CRC_0_CCITT)
00113 #define CCITT_1(XX, YY, ZZ) u8fnCRC(XX, YY, ZZ, CLEAR, CRC_DMA_CH_1, \
00114                                     CRC_1_CCITT)
00115 
00116 /*** Enums ***/
00117 enum DEFAULT_CRC_CONFIG_INDECES 
00118 {
00119   CRC_0_CCITT = 0, CRC_1_CCITT, CRC_0_32, CRC_1_32
00120 };
00121 
00122 /*** TypeDefs ***/
00123 typedef union 
00124 {
00125   struct
00126   {
00127     vuint8_t Instance: 4;
00128     vuint8_t Unused: 1;
00129     vuint8_t Polyg: 1;
00130     vuint8_t Swap:  1;
00131     vuint8_t Inv:   1;
00132   }P;
00133   vuint8_t A;
00134 } CRCConfig_t;
00135 /*
00136  **************************************************************
00137  * Declarations 
00138  **************************************************************/
00139 /*** Global ***/
00140 
00141 /*** Static ***/
00142 
00143 /*** Constant ***/
00144 /*
00145  **************************************************************
00146  * Function Prototypes 
00147  **************************************************************/
00148 /*
00149  ******************************************************************************
00150  *
00151  * Function:          vfnInitCRC
00152  *
00153  */
00162 void vfnInitCRC(uint8_t u8Instance, uint32_t u32Remainder);
00163 /*
00164  ******************************************************************************
00165  *
00166  * Function:          u8fnCRC
00167  *
00168  */
00185 uint8_t u8fnCRC(const uint8_t* pu8StartAddress,
00186                 const uint32_t u32NOfBytes,
00187                 uint32_t* pu32Result,
00188                 const uint32_t u32Remainder,
00189                 const uint8_t u8DMAChannel,
00190                 const uint8_t u8CRCConfig);
00191 /*
00192  ******************************************************************************
00193  *
00194  * Function:          vfnCRCConfig
00195  *
00196  */
00203 static void vfnCRCConfig(CRCConfig_t tConfig);
00204 /*
00205  ******************************************************************************
00206  *
00207  * Function:          vfnCRCConfigDMA
00208  *
00209  */
00220 static void vfnCRCConfigDMA(const uint8_t* pu8StartAddress,
00221                             const uint32_t u32NOfBytes,
00222                             const uint8_t u8DMAChannel,
00223                             const CRCConfig_t tCRCConfig);
00224 /*
00225  ******************************************************************************
00226  *
00227  * Function:          vfnCRCIsr
00228  *
00229  */
00238 static void vfnCRCIsr(uint8_t u8Instance);
00239 /*
00240  ******************************************************************************
00241  *
00242  * Function:          vfnCRC0Isr
00243  *
00244  */
00251 void vfnCRC0Isr(void);
00252 /*
00253  ******************************************************************************
00254  *
00255  * Function:          vfnCRC1Isr
00256  *
00257  */
00264 void vfnCRC1Isr(void);
00265 #endif /* CRC_H_ */